package com.activiti.flow.service;

import com.activiti.flow.model.vo.ProcessInstanceVO;

import java.util.Map;

/**
 * @author pisory
 * @version 1.0
 * @date 2020/7/19
 */
public interface ProcessHandleService {

    /**
     * 同意
     *
     * @param taskId
     * @param variables
     * @throws Exception
     */
    void pass(String taskId, Map<String, Object> variables) throws Exception;

    /**
     * 不同意/取消(直接结束流程)
     *
     * @param vo
     * @throws Exception
     */
    void cancel(ProcessInstanceVO vo) throws Exception;

    /**
     * 转办流程
     *
     * @param taskId   当前任务节点ID
     * @param userId 被转办人Id
     */
    void transferAssignee(String taskId, String userId);

    /**
     * 中止流程(特权人直接审批通过等)
     *
     * @param taskId
     * @throws Exception
     */
    void endProcess(String taskId) throws Exception;

    /**
     * 节点转跳
     *
     * @param taskId     当前任务ID
     * @param variables  流程变量
     * @param activityId 流程转向执行任务节点ID
     *                   此参数为空，默认为提交操作
     * @throws Exception
     */
    void commitProcess(String taskId, Map<String, Object> variables, String activityId) throws Exception;

    /**
     * 退回流程
     *
     * @param taskId     当前任务ID
     * @param activityId 退回节点ID
     * @param variables  流程存储参数
     * @throws Exception
     */
    void backProcess(String taskId, String activityId, Map<String, Object> variables) throws Exception;
}
